死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
public class DeadLockDemo {
public static void main(String[] args) {
Resource resource1 = new Resource("资源1");
Resource resource2 = new Resource("资源2");
doSomething(resource1, resource2);
doSomething(resource2, resource1);
}
private static void doSomething(Resource resource1, Resource resource2) {
new Thread(()-> {
//获取资源1的锁
System.out.println(Thread.currentThread().getName() + " 请求" + resource1 + "的锁");
synchronized (resource1) {
System.out.println(Thread.currentThread().getName() + " 获取到" + resource1 + "的锁");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//获取资源2的锁
System.out.println(Thread.currentThread().getName() + " 请求" + resource2 + "的锁");
synchronized (resource2){
System.out.println(Thread.currentThread().getName() + " 获取到" + resource2 + "的锁");
}
}
}).start();
}
}
class Resource {
private String name;
public Resource(String name) {
this.name = name;
}
@Override
public String toString() {
return this.name;
}
}